// package关键字：声明当前类所在的包，用于组织和管理代码
// com.itheima.polymorphsm2：包名，通常采用公司域名反写+项目名的形式
package com.itheima.polymorphsm2;

// public：访问修饰符，表示这个类可以被其他任何类访问
// class：关键字，用于定义一个类
// Wolf：类名，采用驼峰命名法，首字母大写
// extends Animal：表示Wolf类继承自Animal类
// 继承的作用：子类可以使用父类的非私有成员（属性和方法），并可以添加自己的特性
public class Wolf extends Animal {
    // String：数据类型，表示字符串类型
    // name：成员变量名，这里与父类Animal中的name变量同名
    // "狼"：字符串字面量，是name变量的初始值
    // 注意：当子类和父类有同名变量时，子类会覆盖父类的变量（但在多态情况下调用规则不同）
    String name = "狼";

    // @Override：注解，表示下面的方法是重写父类的方法
    // 作用：1. 明确标记这是重写方法 2. 让编译器检查是否真的重写了父类方法
    @Override
    // public：访问修饰符，表示这个方法可以被其他任何类访问
    // void：返回值类型，表示这个方法没有返回值
    // run()：方法名，与父类Animal中的run方法同名，实现了方法重写
    // 方法重写规则：方法签名必须与父类完全相同，访问权限不能低于父类
    public void run() {
        // System.out.println()：Java的输出语句，用于向控制台输出信息
        // "🐺跑的贼溜~~~"：要输出的字符串内容，包含一个表情符号
        System.out.println("🐺跑的贼溜~~~");
    } // run方法结束标记

    // public：访问修饰符，表示这个方法可以被其他任何类访问
    // void：返回值类型，表示这个方法没有返回值
    // eatSheep()：方法名，这是Wolf类特有的方法，父类Animal中没有
    // 子类特有方法：体现了子类的扩展能力
    public void eatSheep() {
        // System.out.println()：Java的输出语句，用于向控制台输出信息
        // "狼吃羊"：要输出的字符串内容
        System.out.println("狼吃羊");
    } // eatSheep方法结束标记
} // Wolf类结束标记
